/**
 * Вспомогательный класс для получения хешей строк или файлов.
 * В реализации использован алгоритм SHA-256.
 */

#ifndef _HASHUTILITY_H
#define	_HASHUTILITY_H

#include <string>
#include <iostream>

namespace etu {
namespace common {

class HashUtility {
public:

    /**
     * Получение хеша заданной строки
     * @param str исходная строка
     * @return хеш исходной строки
     */
    static std::string hashString(const std::string& str);

    /**
     * Получение хеша файла, расположенного по заданному пути
     * @param filePath путь к файлу
     * @return хеш файла
     */
    static std::string hashFile(const std::string& filePath);

    /**
     * Получение хеша данных, содержащихся в буфере
     * @param buffer буфер, содержащий данные
     * @param length количество байт в буфере
     * @return хеш файла
     */
    static std::string hashBuffer(unsigned char* buffer, int length);
    
private:

    /**
     * Получение хеша данных, содержащихся в заданном потоке
     * @return хеш данных из заданного потока
     */
    static std::string hashStream(std::istream& input);

    HashUtility();
};

}
}

#endif	/* _HASHUTILITY_H */

